import configparser
import os
baseConfigDir = os.path.realpath("./")

def loadDir(path, hostName="localhost",printError= True):
	#os.chdir(path)
	v = configparser.ConfigParser()
	v.read(os.path.join(path,hostName+".ini"))
	if "/" not in v.sections() and printError:
		print("Attenzione, manca valore per root: /, host: %s" % hostName)
	return v

def host(hostName):
	return loadDir(baseConfigDir,hostName)['Host']

def risolviPath(risorsa, baseDir=None,hostName="localhost"):
	if baseDir is None:
		baseDir = baseConfigDir
	val = loadDir(baseDir, hostName)
	#print("risolutionze: "+risorsa)
	key = None
	risorsa = pulisciPath(risorsa)
	resc = ""
	assert(risorsa != "SERVER")
	#cerchiamo una corrispondenza esatta
	if risorsa in val.sections():
		key = risorsa
	else: #altrimenti cerchiamo di beccare la prima cartella
		prossimoSlash = risorsa[1:].find("/")
		if prossimoSlash > 1:
			cartella = risorsa[0:prossimoSlash+1]
			if cartella in val.sections() or (cartella + "/") in val.sections():
				key = cartella
				resc = risorsa[prossimoSlash+1:]
	if key is None:
		if "/" in val:
			key = "/"
			resc = risorsa[1:]
	if key is None:
		return None, None, None, None
	if "Dir" in val[key]:
		newDir = os.path.join(baseDir,val[key]['Dir'])
		result = risolviPath(resc,newDir)
		return result[0],result[1],os.path.join(key, result[2][1:]), result[3]
	return val[key], resc, key, baseDir

def pulisciPath(risorsa):
	#concentriamoci sulla parte prima di ?
	domanda = risorsa.find("?")
	if domanda == -1:
		domanda = len(risorsa)
	primaParte = risorsa[0:domanda]
	
	while primaParte.find("//") != -1:
		primaParte = primaParte.replace("//","/")
	
	#risostituiamo
	risorsa=primaParte + risorsa[domanda:]
	return risorsa

#class Modulo:
	#def __init__(self,percorso,statico=False):
		#self.percorso = percorso
		#self.statico = statico
		#self.okServilo = False
		#webStatic = False
		#if not self.statico and \
				#self.percorso is not str and 'WebStatic' in self.percorso:
			#self.statico = True
			#self.percorso = self.percorso['WebStatic']
			#webStatic = True
		#if self.statico:
			#self.percorso = os.path.realpath(
				#os.path.join(valori["SERVER"]['Static'],
				#self.percorso[1:])
			#) if not webStatic else os.path.realpath(self.percorso)
			
			#if (self.percorso.find(os.path.realpath(valori["SERVER"]['Static'])) != -1 or webStatic) and \
					#os.path.isfile(self.percorso):
				#self.okServilo = True
